#include "user.h"

uint8_t  ReadyPrintFlag = 0;        //接收完毕照片，等待开启打印
uint8_t  StartPrintFlag = 0;		//按键开启准备打印标志位

uint8_t  Print_ContinueFlag=1; 		//持续打印标志,默认连打模式
uint8_t  Print_FlashSwitch=1;       //Flash存图开关，默认开启
uint8_t  SetCommand_Value = 0x03;   //设置指令参数值,默认开启连续打印以及存图记忆功能

uint8_t  ResetESP32count=0;			//ESP32复位连按计数
uint8_t  ResetESP32StartCnt=0;		//ESP32复位连按定时开启

uint16_t Print_Timecount = 0;       //打印间隔时间参数,默认为0m,即抬手连打

uint8_t Parameter_Array[3]={0,0,0};

/************************************************
函数名称 ： SetCommand_Handle
功    能 ： APP设置指令分析处理函数
参    数 ： 参数1：指令参数
返 回 值 ： 无
*************************************************/
void SetCommand_Handle(uint8_t cmd)
{
  uint8_t i=0;
  for(i=0;i<8;i++)
  {
    if(cmd&(0x01<<i))
    {
      switch(i)
      {
        case 0:
          Print_ContinueFlag = 1;     //设置指令为连续打印状态
          SetCommand_Value |= 0x01;
          break;
        case 1:          
          Print_FlashSwitch = 1;     //设置指令为存图开
          SetCommand_Value |= 0x02;
          break;
      default:break;
      }
    }
    else
    {
      switch(i)
      {
        case 0:
          Print_ContinueFlag = 0;     //设置指令为单次打印状态
          SetCommand_Value &= ~(0x01);
          break;
        case 1:
          Print_FlashSwitch = 0;     //设置指令为存图关
          SetCommand_Value &= ~(0x02);
          break;
      default:break;
      }
    }
  }
}

uint8_t only_count = 0;
void PhotoDate_Handle(char *dat,uint16_t Start_num,uint8_t Size)
{
	uint16_t _count=0;
	_count = Start_num;
	data_length = 0;
	data_length |= dat[_count+0]<<24;
	data_length |= dat[_count+1]<<16;
	data_length |= dat[_count+2]<<8;
	data_length |= dat[_count+3];
	_count += 4;//此处加4 是因为上面一个循环完毕后，count最终值没有加上4
//  StartCRC_Val = 0;
//  StartCRC_Val |= (uint32_t)dat[_count+0]<<24;
//  StartCRC_Val |= (uint32_t)dat[_count+1]<<16;
//  StartCRC_Val |= (uint32_t)dat[_count+2]<<8;
//  StartCRC_Val |= (uint32_t)dat[_count+3];
	_count += 4;//CRC的值为4个零，所以count也要＋4，是为了兼容老版本固件
    Preflag = 0;
    ReadyPrintFlag = 0;//是防止出现前一次传图是成功的情况下下次传图失败后但是Psram的图又被覆盖了，导致打印的图案是错乱的
    if(TimCntCmdHandle(&dat[_count])){//有图情况
        only_count = 0;
		uint8_t resp_data[4] = {0x6A,0xA6,0x3,0x1};//应答允许发送
		SendToApp(sizeof(resp_data),resp_data);
		PrintfCmd(4,resp_data);
    }
    else//无图情况
    {
        only_count = 1;
        uint32_t num = CntV.X_Coord+((CntV.CharHigh<=10)?(OX/10*CntV.CharHigh*4):((OX/8*(CntV.CharHigh-10)+OX)*4))+62/*传图左侧补白边*/;//最多4个计数器值
        //清空计数器值所占的空间，避免前面有传过的图预留下来
        for(uint32_t y=0;y<(num*39);y++)
			RxBuf[7+y] = 0x0;
		uint8_t resp_data[4] = {0x6A,0xA6,0x3,0x8};
		SendToApp(sizeof(resp_data),resp_data); //告诉客户端发送完毕
		PrintfCmd(4,resp_data);
		ReadyPrintFlag = 1;
		StartPrintFlag = 1; 					//开启打印
		gpio_intr_enable(Pluse_IO);				//允许外部引脚中断
        CountReflash = 1;						//刷新计数器
        Beep_set(200);
		LED5_ON;
    }
}

